const fs = require('fs');
const path = require('path');

// 模拟ctx对象
const mockCtx = {
  logger: {
    info: console.log,
    warn: console.warn,
    error: console.error
  }
};

// 从process_plugin_data.js中提取extractOrdersFromPluginData函数
function extractOrdersFromPluginData(item) {
  const ctx = mockCtx;
  
  try {
    // 检查数据结构 - 改为检查response.result.data
    if (!item || !item.response || !item.response.result || !item.response.result.data) {
      ctx.logger.warn('[PluginData] 插件数据格式不正确，缺少response.result.data');
      return [];
    }
    
    // 获取响应数据 - 改为从response.result.data获取
    let responseData = item.response.result.data;
    if (typeof responseData === 'string') {
      try {
        responseData = JSON.parse(responseData);
      } catch (parseError) {
        ctx.logger.warn('[PluginData] 插件数据格式不正确，无法解析response.result.data');
        return [];
      }
    }
    
    // 检查是否为订单数据格式 - 修正嵌套结构
    let orderDataArray = [];
    
    // 处理政采云数据结构: response.result.data是一个订单数组
    if (Array.isArray(responseData) && responseData.length > 0) {
      // 直接使用responseData作为订单数组
      orderDataArray = responseData;
    }
    
    if (orderDataArray.length === 0) {
      ctx.logger.warn('[PluginData] 订单数据格式不正确，未找到有效的订单数据数组');
      return [];
    }
    
    // 提取订单数据
    const orders = orderDataArray.map(orderItem => {
      // 获取订单基本信息
      const order = orderItem.order || {};
      
      // 获取订单项
      const items = orderItem.items || [];
      
      return {
        // 订单基本信息
        platformOrderId: order.id,  // 平台订单ID
        customerId: order.purchaserId,  // 客户ID
        orderAmount: parseFloat(order.orderTotalFee) || 0,  // 订单金额
        orderStatus: mapOrderStatus(order.status),  // 订单状态
        orderDate: order.createdAt ? new Date(order.createdAt) : new Date(),  // 订单日期
        platformSource: order.platformSource || 'zcy',  // 平台来源
        invoiceStatus: mapInvoiceStatus(order.invoiceStatus),  // 开票状态
        invoiceDate: order.invoiceDate ? new Date(order.invoiceDate) : null,  // 开票日期
        responsibleSalesman: order.responsibleSalesman || '',  // 负责销售
        isGift: order.isGift === 1,  // 是否含赠品
        collectionStatus: order.collectionStatus || 'pending',  // 催款状态
        collectionCount: parseInt(order.collectionCount) || 0,  // 催款次数
        lastCollectionDate: order.lastCollectionDate ? new Date(order.lastCollectionDate) : null,  // 最后催款日期
        lastCollectionResult: order.lastCollectionResult || '',  // 最后催款结果
        nextFollowupDate: order.nextFollowupDate ? new Date(order.nextFollowupDate) : null,  // 下次跟进日期
        orderNo: order.orderNo || '',  // 订单编号
        
        // 订单项
        items: items.map(item => ({
          productId: item.itemId,  // 产品ID
          productName: item.itemName,  // 产品名称
          specification: extractSpecification(item.attributes),  // 规格
          quantity: parseInt(item.quantity) || 0,  // 数量
          unit: extractUnit(item.extraMap),  // 单位
          unitPrice: parseFloat(item.skuPrice) || 0,  // 单价
          amount: parseFloat(item.fee) || 0,  // 金额（使用fee字段而不是amount字段）
          remark: item.remark || ''  // 备注
        }))
      };
    });
    
    ctx.logger.info(`[PluginData] 成功提取 ${orders.length} 条订单数据`);
    return orders;
  } catch (error) {
    ctx.logger.error('[PluginData] 提取订单数据失败:', error);
    return [];
  }
}

// 映射订单状态
function mapOrderStatus(status) {
  // 政采云订单状态映射
  const statusMap = {
    '1': 'pending',      // 待处理
    '3': 'shipped',      // 已发货
    '4': 'completed',    // 已完成
    '-5': 'cancelled',   // 已取消
    '5': 'completed'     // 已验收
  };
  
  return statusMap[status] || 'pending';
}

// 映射开票状态
function mapInvoiceStatus(status) {
  // 政采云开票状态映射
  const statusMap = {
    'uninvoiced': 'uninvoiced',  // 未开票
    'invoiced': 'invoiced',      // 已开票
    'sent': 'sent'               // 已寄送
  };
  
  return statusMap[status] || 'uninvoiced';
}

// 提取规格信息
function extractSpecification(attributes) {
  if (!attributes || !Array.isArray(attributes)) {
    return '';
  }
  
  return attributes.map(attr => `${attr.key}:${attr.value}`).join('; ');
}

// 提取单位信息
function extractUnit(extraMap) {
  if (!extraMap) {
    return '';
  }
  
  return extraMap.unit || '';
}

// 读取真实数据文件
const rawData = fs.readFileSync(path.join(__dirname, '通过插件拦截响应数据（政采云销售订单）.md'), 'utf8');
const jsonData = JSON.parse(rawData);

// 获取第一个数据项进行测试
const testDataItem = jsonData.data[0];

console.log('🔍 开始测试订单数据提取...');
console.log('数据项URL:', testDataItem.url);
console.log('数据项方法:', testDataItem.method);

// 测试提取订单数据
const extractedOrders = extractOrdersFromPluginData(testDataItem);

console.log('\n📦 提取结果:');
console.log('提取到的订单数量:', extractedOrders.length);

if (extractedOrders.length > 0) {
  console.log('\n📋 第一个订单详情:');
  console.log('订单ID:', extractedOrders[0].platformOrderId);
  console.log('订单金额:', extractedOrders[0].orderAmount);
  console.log('订单状态:', extractedOrders[0].orderStatus);
  console.log('订单日期:', extractedOrders[0].orderDate);
  console.log('订单项数量:', extractedOrders[0].items.length);
  
  if (extractedOrders[0].items.length > 0) {
    console.log('\n📋 第一个订单项详情:');
    console.log('产品名称:', extractedOrders[0].items[0].productName);
    console.log('数量:', extractedOrders[0].items[0].quantity);
    console.log('单价:', extractedOrders[0].items[0].unitPrice);
    console.log('金额:', extractedOrders[0].items[0].amount);
    console.log('规格:', extractedOrders[0].items[0].specification);
    console.log('单位:', extractedOrders[0].items[0].unit);
  }
}